package com.ys.finalcase;

/**
 * 描述:
 * 1.final关键字概述
 *    含义：最终的、不可变的
 *    final能修饰的内容：修饰类、成员方法、静态方法、成员变量、静态变量和局部变量，但是不能修饰构造方法、静态代码块和构造代码块。
 * 2.final关键字作用
 *   a)final关键字修饰的类，那么这个类就不能被继承。
 *   b)final修饰的成员方法，那么这个方法就不能被重写。
 *   c)final修饰的变量（成员变量、静态变量和局部变量），那么就是常量。
 *      1)常量只能赋值一次，并且采用“字母全大写，多个单词之间以下划线连接”。
 *      2)final修饰的成员变量，要么做显示初始化，要么在构造代码块中做初始化，要么在构造方法中做初始化。
 *          --> 因为成员变量有默认值，因此final修饰成员变量的时候，必须做初始操作。
 *      3)final修饰的静态变量，要么做显示初始化，要么在静态代码块中做初始化。
 *          --> 因为静态变量有默认值，因此final修饰静态变量的时候，必须做初始操作。
 * 3.final关键字的注意点
 *    a)final修饰的“引用数据类型”变量时，该变量保存的地址值不能改变，但是指向堆内存中的成员变量值可以修改。
 * 4.目前已经学习过的类中，哪些类被final修饰？？？
 *   String、Math和Scanner都被final修饰，则意味着这类都不能被继承，也就意味着这些类中的方法也不能被重写。
 *
 * @author CodeYang
 * @version 2020/12/16 21:31
 */

class Parent {
    String name;
    static String classRoom;
    /*static  {
        classRoom = "教师五";
    }*/
    public Parent() {
        this.name = "";
    }
    public Parent(String name) {
        this.name = name;
    }
    public void eat() {
        System.out.println("eat ...");
    }
    public static void method() {
        System.out.println("method ...");
    }
}

class Child extends Parent {
    @Override
    public void eat() {
        System.out.println("eat ...");
    }
}
public class finalClass {
    public static void main(String[] args) {
        final Parent parent = new Parent("卧龙");
        // parent = new Parent("凤雏");

        parent.name = "凤雏";
    }

}
